<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>原型链</title>
  </head>
  <body></body>
  <script>
    //1. 字面量
    let o1 = {
      name: "o1",
    };
    //2. 构造函数式
    let M = function () {
      this.name = "o2";
    };
    let o2 = new M();

    //3 Object.creat()
    let p = { name: "33" };
    let o3 = Object.create(p);

    M.prototype.say = function () {};

    // new 运算符

    let new2 = function (func) {
      //    func.custruct
      // 1. 创建 一个空对象 继承了构造函数的原型对象
      let o = Object.create(func.prototype);
      //2. 就上下文 this 转移到 新对象上 （关联上下文）
      let k = func.call(o);
      //3 返回对象 （看情况 返回对象）
      if (typeof k === "object") {
        return k;
      } else {
        return o;
      }
    };
    //instanceof 1.判断  是否是构造函数的实例  2. 判断原型对象的 custruct 是否 是 实例的 构造函数

    // 原型链
    /*
    实例    构造函数   原型对象 
    
    */
  </script>
</html>
